/**
 * @description json schema 验证中间件
 * @author malin
 */

const { SuccessModel, ErrorModel } = require('../model/ResModel')
const { jsonSchemaFileInfo } = require('../model/ErrorInfo')

/**
 * 生成 json schema 验证的中间件
 * 给博客信息验证和用户信息验证服务，
 * 所以要在函数内部定义中间件函数，
 * 传参不同，执行不同的信息验证，复用
 * @param {function} validateFn 验证函数
 */
function genValidator(validateFn) {
    // 接收什么验证，就生成什么验证的中间件
    // 定义中间件函数
    async function validator(ctx, next) {
        // 用户数据校验
        const data = ctx.request.body
        // 通过检验，会返回undefined
        const error = validateFn(data)
        if(error) {
            ctx.body = new ErrorModel(jsonSchemaFileInfo)
            return
        }
        // 验证成功，继续向下走
        await next()
    }
    // 返回中间件函数
    return validator
}

module.exports = {
    genValidator
}
